// 这个文件可以帮我们打包 packages 下面的文件 最终打包js文件

// node dev.js 要打包的名字 -f 打包的格式
import minimist from "minimist";
import { dirname, resolve } from "path";
import { createRequire } from "module";
import { fileURLToPath } from "url";
import esbuild from "esbuild";

// fileURLToPath 在esm 中 处理生成 __dirname
// esm 使用commonjs中的变量

const __file_name = fileURLToPath(import.meta.url) // 获取文件的绝对路径
const __dirname = dirname(__file_name)
const require = createRequire(import.meta.url)

// node 中的命令参数 使用process.argv来获取
const args = minimist(process.argv.slice(2))
console.log("🚀 ~ args:", args)

const target = args._[0] || 'reactivity'
const format = args.f || 'iife'
console.log("🚀 ~ __dirname:", __dirname)
console.log("🚀 ~ target:", target, format, require)

// 入口文件 根据命令行提供的参数进行解析
const entry = resolve(__dirname, `../packages/${target}/src/index.ts`)
const pkg = resolve(`../packages/${target}/package.json`)

// 根据需要进行打包
esbuild.context({
    entryPoints: [entry], // 入口 
    outfile: resolve(__dirname, `../packages/${target}/dist/${target}.js`), // 出口
    bundle: true, // reactivity -> shared 依赖会打包到一起
    platform: 'browser', //打包给浏览器使用
    sourcemap: true,
    format, // cjs esm iife 
    globalName: pkg.buildOptions?.name
}).then((ctx) => {
    console.log('start');
    return ctx.watch()
})
